home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / utils / rexxdoor2.33+ / rexxdoor.c < prev    next >
C/C++ Source or Header  |  1993-02-22  |  11KB  |  327 lines

  1. #include <intuition/intuitionbase.h>
  2. #include <clib/rexxsyslib_protos.h>
  3. #include <exec/exec.h>
  4. #include <rexx/rxslib.h>
  5. #include <rexx/storage.h>
  6. #include <rexx/rexxio.h>
  7. #include <rexx/errors.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <string.h>
  11. #include <dos/dostags.h>
  12. #include <clib/exec_protos.h>
  13. #include <clib/dos_protos.h>
  14. #include <clib/alib_protos.h>
  15. #include "sc:ae/CmodGlue/doorheader.h"
  16. #include "sc:ae/CmodGlue/glue.h"
  17.  
  18. #define SM sendmessage
  19. #define PM prompt
  20. #define HK hotkey
  21. #define GU getuserstring
  22. #define PU putuserstring
  23. struct IntuitionBase *IntuitionBase;
  24. struct RexxSysBase *RexxSysBase;
  25. struct MsgPort *MyRexxPort;
  26. ULONG RexxSig;
  27. void OpenRexxPort(int node);
  28. void CheckRexxMessage();
  29. void CloseRexx(int opt);
  30. void RemoveRexxPort(int opt);
  31. void end();
  32. int node;
  33.   struct RexxMsg *rexxmsg;
  34. struct  MsgPort  RexxPort;
  35. struct  RexxMsg  *OutMsg, *CreateRexxMsg();
  36. char DoorVer[]="13";
  37. struct rx_mes *mslist;
  38.   char CommandLine[200];
  39. void LastCommand(void);
  40. int StartProcess(char *s,ULONG Stack);
  41. void main(int argc,char *argv[]);
  42. void main(int argc,char *argv[])
  43. {
  44.   char Command[200];
  45.   if(argc==1)
  46.   {
  47.      printf("RexxDoor v1.4, written by Joseph Hodge\n");
  48.      printf("\n");
  49.      printf("This module is called by AmiExpress 1.1v+\n");
  50.      printf("Requires: RexxMast, RX & Rexxsyslib.library\n");
  51.      exit(0);
  52.   }
  53.   node=argv[1][0]-'0';
  54.   OpenRexxPort(argv[1][0]-'0');
  55.   Register(argv[1][0]-'0');
  56.   node=argv[1][0]-'0';
  57.   GU(Command,BB_TASKPRI);
  58.   SetTaskPri(FindTask(0),(LONG)atol(Command));
  59.   strcpy(CommandLine,argv[2]);
  60.   sprintf(Command,"sys:rexxc/RX %s %c",CommandLine,argv[1][0]);
  61.   StartProcess(Command,4096L);
  62.   CheckRexxMessage();
  63.   CloseRexx(0);
  64. }
  65.  
  66. void end()
  67. {
  68.   rexxmsg->rm_Result1=10;
  69.     
  70.   rexxmsg->rm_Result2=0;
  71.   ReplyMsg((struct Message *) rexxmsg);
  72.   CloseRexx(1);
  73.   exit(0);
  74. }
  75. void OpenRexxPort(int node)
  76. {
  77. if((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL)
  78.    printf("can't open intuition.library\n");
  79.    exit(0);
  80. }
  81. if((RexxSysBase = (struct RexxSysBase *)OpenLibrary(RXSNAME,0)) == NULL)
  82.     {
  83.     puts("rexxsyslib.library not found, AREXX port disabled\n");
  84.     }
  85.     switch(node)
  86.     {
  87.       case 0: InitPort(&RexxPort,"AERexxPort0"); AddPort(&RexxPort);
  88.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl0",0L); break;
  89.       case 1: InitPort(&RexxPort,"AERexxPort1"); AddPort(&RexxPort);
  90.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl1",0L); break;
  91.       case 2: InitPort(&RexxPort,"AERexxPort2"); AddPort(&RexxPort);
  92.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl2",0L); break;
  93.       case 3: InitPort(&RexxPort,"AERexxPort3"); AddPort(&RexxPort);
  94.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl3",0L); break;
  95.       case 4: InitPort(&RexxPort,"AERexxPort4"); AddPort(&RexxPort);
  96.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl4",0L); break;
  97.       case 5: InitPort(&RexxPort,"AERexxPort5"); AddPort(&RexxPort);
  98.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl5",0L); break;
  99.       case 6: InitPort(&RexxPort,"AERexxPort6"); AddPort(&RexxPort);
  100.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl6",0L); break;
  101.       case 7: InitPort(&RexxPort,"AERexxPort7"); AddPort(&RexxPort);
  102.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl7",0L); break;
  103.       case 8: InitPort(&RexxPort,"AERexxPort8"); AddPort(&RexxPort);
  104.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl8",0L); break;
  105.       case 9: InitPort(&RexxPort,"AERexxPort9"); AddPort(&RexxPort);
  106.               MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl9",0L); break;
  107.     }
  108. RexxSig = 1L << MyRexxPort->mp_SigBit;
  109.  
  110. }
  111. void CheckRexxMessage(void)
  112. {
  113.  
  114.   char String[200];
  115.   char Tmp[200];
  116.   long t;
  117.   int i;
  118.   int cmd;
  119.   int PromptWidth=100;
  120.   char PutUserStr[200];
  121. struct rx_mes *mslist2;
  122.   strcpy(PutUserStr,"");
  123.  
  124. while(1)
  125.     {
  126.      rexxmsg=(struct RexxMsg *)WaitPort((struct MsgPort *) MyRexxPort);
  127.     while(( rexxmsg = (struct RexxMsg *) GetMsg((struct MsgPort *) MyRexxPort)))
  128.         {
  129.      
  130.                  rexxmsg->rm_Result1=0L;
  131.                  rexxmsg->rm_Result2=0L;
  132.         if( !strnicmp(rexxmsg->rm_Args[0],"getuser",7) )
  133.             {
  134.                            strcpy(String,rexxmsg->rm_Args[0]+8);
  135.                            cmd=atoi(String);
  136.                            GU(String,atoi(String));
  137.                     rexxmsg->rm_Result1=0;
  138.                     rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  139.               
  140.                 } else
  141.                if( !strnicmp(rexxmsg->rm_Args[0],"putuser",7) )
  142.             {
  143.                            strcpy(String,rexxmsg->rm_Args[0]+8);
  144.                            cmd=atoi(String);
  145.                            PU(PutUserStr,atoi(String));
  146.                     rexxmsg->rm_Result1=0;
  147.                     rexxmsg->rm_Result2=0;
  148.               
  149.                 }  else
  150.                 if( !strnicmp(rexxmsg->rm_Args[0],"ConvertToDate",13) )
  151.             {
  152.                            strcpy(String,rexxmsg->rm_Args[0]+14);
  153.                            DateToString(atol(String),String);
  154.                 rexxmsg->rm_Result1=0;
  155.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  156.                
  157.               
  158.                 }  else
  159.                if( !strnicmp(rexxmsg->rm_Args[0],"ConvertToTime",13) )
  160.             {
  161.                            strcpy(String,rexxmsg->rm_Args[0]+14);
  162.                            TimeToString(atol(String),String);
  163.                 rexxmsg->rm_Result1=0;
  164.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  165.                
  166.               
  167.                 }  else
  168.                 if(!strnicmp(rexxmsg->rm_Args[0],"putinfo",7))
  169.                 {
  170.                     strcpy(String,rexxmsg->rm_Args[0]+8);
  171.                     PutInfo(atoi(PutUserStr),atoi(String));
  172.                     rexxmsg->rm_Result1=0;
  173.                     rexxmsg->rm_Result2=0;
  174.                 }else if(!strnicmp(rexxmsg->rm_Args[0],"VerRexxDoor",11))
  175.                 {
  176.                    strcpy(String,DoorVer);
  177.                 rexxmsg->rm_Result1=0;
  178.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  179.                 }else
  180.                 if(!strnicmp(rexxmsg->rm_Args[0],"transmit",8))
  181.                   {
  182.                     strcpy(String,rexxmsg->rm_Args[0]+9); 
  183.                     SM(String,1); 
  184.                     rexxmsg->rm_Result1=0;
  185.                     rexxmsg->rm_Result2=0;
  186.                   } else
  187.                 if(!strnicmp(rexxmsg->rm_Args[0],"sendmessage",11))
  188.                 {
  189.                   strcpy(String,rexxmsg->rm_Args[0]+12);
  190.                   SM(String,0);
  191.                   rexxmsg->rm_Result1=0;
  192.                   rexxmsg->rm_Result2=0;
  193.                   
  194.                 }else
  195.                 if(!strnicmp(rexxmsg->rm_Args[0],"EditFile",8))
  196.                 {
  197.                   strcpy(String,rexxmsg->rm_Args[0]+9);
  198.                   Editfile(String,atoi(PutUserStr));
  199.                   rexxmsg->rm_Result1=0;
  200.                   rexxmsg->rm_Result2=0;
  201.                 }
  202.                 else
  203.                 if(!strnicmp(rexxmsg->rm_Args[0],"sendstring",10))
  204.                 {
  205.                   strcpy(String,rexxmsg->rm_Args[0]+11);
  206.                   SM(String,0);
  207.                   rexxmsg->rm_Result1=0;
  208.                   rexxmsg->rm_Result2=0;
  209.                   
  210.                 }else
  211.              if(!strnicmp(rexxmsg->rm_Args[0],"RemoveReserved",14))
  212.              {
  213.                 strcpy(String,rexxmsg->rm_Args[0]+15);
  214.                 i=strlen(String)-1;
  215.                 while(i>-1)
  216.                 {
  217.                   if(String[i]=='/' || String[i]=='*' || String[i]=='?' ||
  218.                      String[i]=='#' || String[i]==' ') String[i]='_';
  219.                   i--;
  220.                 }
  221.                 rexxmsg->rm_Result1=0;
  222.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  223.              }else
  224.  
  225.              if(!strnicmp(rexxmsg->rm_Args[0],"getchar",7))
  226.              {
  227.                 HK("",String);
  228.                 rexxmsg->rm_Result1=0;
  229.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  230.               }else
  231.              if(!strnicmp(rexxmsg->rm_Args[0],"showfile",8))
  232.              {
  233.                 strcpy(String,rexxmsg->rm_Args[0]+9);
  234.                 showfile(String);
  235.                 rexxmsg->rm_Result1=0;
  236.                 rexxmsg->rm_Result2=0;
  237.              }
  238.              else
  239.              if(!strnicmp(rexxmsg->rm_Args[0],"flagfile",8))
  240.              {
  241.                 strcpy(String,rexxmsg->rm_Args[0]+9);
  242.                 FlagFile(String);
  243.                 rexxmsg->rm_Result1=0;
  244.                 rexxmsg->rm_Result2=0;
  245.              }
  246.              else
  247.              if(!strnicmp(rexxmsg->rm_Args[0],"showgfile",9))
  248.              {
  249.                 strcpy(String,rexxmsg->rm_Args[0]+10);
  250.                 showgfile(String);
  251.                 rexxmsg->rm_Result1=0;
  252.                 rexxmsg->rm_Result2=0;
  253.              }
  254.              else
  255.              if(!strnicmp(rexxmsg->rm_Args[0],"PUTUSTR",7))
  256.              {
  257.                 strcpy(PutUserStr,rexxmsg->rm_Args[0]+8);
  258.                 rexxmsg->rm_Result1=0;
  259.                 rexxmsg->rm_Result2=0;
  260.              }
  261.              else
  262.              if(!strnicmp(rexxmsg->rm_Args[0],"RECEIVE",7))
  263.              {
  264.                 PromptWidth=atoi(rexxmsg->rm_Args[0]+8)-1;
  265.                 rexxmsg->rm_Result1=0;
  266.                 rexxmsg->rm_Result2=0;
  267.              }else
  268.              if(!strnicmp(rexxmsg->rm_Args[0],"QUERY",5))
  269.              {
  270.                 strcpy(String,rexxmsg->rm_Args[0]+6);
  271.                 SM(String,0);
  272.                 PM("",String,PromptWidth);
  273.                 rexxmsg->rm_Result1=0;
  274.                 rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
  275.              }else
  276.              if(!strnicmp(rexxmsg->rm_Args[0],"SHUTDOWN",8))
  277.              {
  278.                 ShutDown();
  279.                 ReplyMsg((struct Message *) rexxmsg);
  280.                 return;
  281.              }
  282.                 ReplyMsg((struct Message *) rexxmsg);
  283.                 
  284.             }
  285.          }
  286. }
  287. void CloseRexx(int opt)
  288. {
  289.   RemoveRexxPort(opt);
  290.   RemPort(&RexxPort);                   /* unlink it                     */
  291.     FreePort(&RexxPort); 
  292.   CloseLibrary((struct Library *)RexxSysBase);
  293.   CloseLibrary((struct Library *)IntuitionBase);
  294. }
  295. void RemoveRexxPort(int opt)
  296. {
  297.   struct RexxMsg *rexxmsg;
  298. if(MyRexxPort)
  299.     {
  300.     while(rexxmsg = (struct RexxMsg *) GetMsg((struct MsgPort *) MyRexxPort))
  301.         {
  302.           if(opt)rexxmsg->rm_Result1=10;  
  303.     
  304.           ReplyMsg((struct Message *) rexxmsg);
  305.         }
  306.     DeletePort((struct MsgPort *) MyRexxPort);
  307.     }
  308. }
  309.  
  310.  
  311. void LastCommand(void)
  312. {
  313. }
  314.  
  315. struct TagItem tags[]={ {SYS_Input,0},{SYS_Output,0},{SYS_Asynch,TRUE},{NP_StackSize,0},{NP_Priority,0},{TAG_DONE,0}};
  316.  
  317. int StartProcess(char *s,ULONG Stack)
  318. {
  319.     tags[3].ti_Data=Stack;
  320.     if(SystemTagList(s,tags)==-1)
  321.     {
  322.       return(0);
  323.     }
  324.     return(1);
  325. }
  326.